<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 字面量 =>看见就知道是什么 [],{},''
        const obj = {
            name: 'eee',
        }
        // new Object()
        const obj1 = new Object() // 创建了一个空对象
        obj1.name = '444'
        console.log(obj1)
        const obj2 = new Object({
            name: '0000',
            age: 20
        })
        console.log(obj2)
        // 构造函数
        // function 构造函数名(形参1,形参2,形参3) { // 构造函数的形参与对象的普通属性是一般一致的
        //     this.属性名1 = 形参1;
        //     this.属性名2 = 形参2; // 属性的值，一般是通过同名的形参来赋值的
        //     this.属性名3 = 形参3;
        //     this.方法名 = function(){
        //     };
        // }
        // // 调用
        // const obj = new 构造函数名(实参1，实参2，实参3)
        function Person(age) {
            this.name = 'ddd'
            this.age = age
            this.sayHi = function () {
                console.log('哈哈哈')
            }
        }
        const p = new Person(18)
        const p1 = new Person(17)
        console.log(p)
        console.log(p.name)
        p.sayHi()

        // 构造函数 相当于一个模板（雪糕的模具）,可以创建一系列具有相同属性名和方法的对象
        // 实例化：通过构造函数创建对象的这个过程=>new一个对象的过程
        // 实例：创建好的这对象
        // 实例对象是相互独立 互不影响的（一个妈生了多个孩子）

        // 注意点:
        // 1. 构造函数名字首字母一般要大写（为了从视觉上区分构造函数和普通函数）
        // 2. 构造函数里 属性和方法前面必须添加 this
        // 3. 构造函数不需要 return 就可以返回结果（构造函数的返回值即为新创建的对象）
        // 4. 我们调用构造函数 必须使用 new
    </script>
</body>

</html>